#include <stdio.h>
#include <string.h>
#define MAX_NODES_NR 16
#define maxN 13
#define key(A) (A) // wyznaczony klucz
#define alpha 0
#define key(A) (A) // wyznaczony klucz
#define less(A, B) (A < B) // porownywanie kluczy
#define eq(A, B) (!less(A, B) && !less(B, A))
#define null(A) (key(st[A]) == key(nullItem))

typedef char node;
node nullNode;
node *st; // tablica symboli
int N; // liczba elementow
node nullItem;
static int m;

int hash(char, int );
inline unsigned digit(node );
void st_init(int ); // inicjowanie tablicy symboli
void st_insert(node ); // wstawianie do tablicy symboli

int main()
{
  int i;
  nullNode = '\0';
  node a = 'P';
  printf("%i\n", hash(a, 12));
  node nodestab[maxN];
  strcpy(nodestab, "ASERCHINGXMP"); // nodes table
  int nnr = strlen(nodestab); // mumber of nodes
  st_init(MAX_NODES_NR); // init symbol table
  for(i = 0; i < nnr; i++)
    st_insert(nodestab[i]);
  for(i = 0; i < nnr; i++)
    printf("%c", st[i]);
  printf("\n"); 
  return 0;
}

// funkcje
int hash(char v, int m)
{ 
  int h = 0;
  h = digit(v)%m;
  return h;
}

unsigned digit(node a)
{
  return key(a)-'\0';
}

void st_init(int max) 
{ 
  int i; 
  N = 0; m = 2*max;
  st = (node*)malloc(m*sizeof(node));
  for (i = 0; i < m; i++) 
    st[i] = nullItem; 
}

void st_insert(node item)
{ 
  m = maxN-1;
  char v = key(item);
  int i = hash(v, m);
  while (st[i] != nullItem) { 
    i = (i+1) % m;
    }
  st[i] = item; 
  N++;
}
